데이터 프레임 날짜 인덱스 설정 :: 시계열 분석 - mindscale
Skip to content

데이터 프레임 날짜 인덱스 설정

알파벳 주가 데이터

우리가 다룰 데이터는 'GOOG'라는 이름의 엑셀 파일입니다. 이는 원래 구글의 주식 코드였습니다. 한국에서는 주식을 구별하기 위해 번호를 부여하지만, 미국에서는 알파벳으로 구별하게 됩니다.

우리는 이 엑셀 파일을 판다스에서 읽어야 합니다. 판다스에서 엑셀 파일을 읽기 위해서는 read_excel 함수를 사용하면 됩니다. 이 함수를 이용하면, 엑셀 파일의 내용이 df라는 데이터프레임에 담기게 됩니다.

import pandas as pd
df = pd.read_excel('GOOG.xlsx')

다음으로 df.head 함수를 사용하면 데이터의 첫 5행을 볼 수 있습니다. 이 데이터에서 각 컬럼의 의미는 다음과 같습니다.

  • Date: 날짜
  • Price: 종가
  • Open: 시가
  • High: 최고가
  • Low: 최저가
  • Vol.: 거래량
  • Change: 가격 변화율
df.head()
Date Price Open High Low Vol. Change %
0 2014-03-28 558.46 559.66 564.88 557.14 41.12K 0.0027
1 2014-03-31 555.45 565.34 565.45 555.41 10.80K -0.0054
2 2014-04-01 565.61 557.18 566.89 557.18 7.95K 0.0183
3 2014-04-02 565.45 598.35 603.17 560.65 147.10K -0.0003
4 2014-04-03 568.18 568.29 585.67 562.59 5.10M 0.0048

파일을 불러왔을 때, 왼쪽에 인덱스를 확인할 수 있습니다. 이 인덱스는 자동으로 번호가 부여되며, 파이썬과 같은 프로그래밍 언어에서는 숫자를 0부터 세는 진행 방식을 사용합니다.

Note

인덱스가 0번부터 시작하는 방식은 여러 가지 장점이 있습니다. 예를 들어, 호텔에서 7호실부터 숙박이 시작 될 때, 사람들에게 0번, 1번, 2번 등으로 번호를 부여하면 계산하기가 훨씬 편리합니다. 0번째 사람이 7호실에 살고, 1번은 8호실에 살게 됩니다. 반면, 1번, 2번, 3번 등으로 부여하면 계산이 복잡해질 수 있습니다. 예를 들면, 7호실에 1번 손님이 있을 경우에는 8번이 되므로 다시 1을 뺄 필요가 있습니다.

인덱스 설정

Date 컬럼을 날짜로 변환해서 다시 Date 컬럼에 덮어 씁니다.

df.Date = pd.to_datetime(df.Date)

Date 컬럼을 df의 인덱스로 설정합니다. set_index 함수는 기본적으로 원본 데이터는 그대로 두고, 인덱스가 변경된 새로운 데이터를 생성합니다. 여기서처럼 inplace=True로 설정하면, 원본 데이터의 인덱스를 변경합니다.

df.set_index('Date', inplace=True)

다시 df.head를 확인해보겠습니다. 앞서는 행 번호가 0, 1, 2, 3, 4로 표시되어 있었지만, 이제는 날짜로 표시되어 있습니다. Date 컬럼은 다른 컬럼과 달리 특별히 처리되어 왼쪽 아래에 표시됩니다. 이는 Date가 더 이상 컬럼이 아닌, 각 행의 번호 역할을 하는 것입니다.

df.head()
Price Open High Low Vol. Change %
Date
2014-03-28 558.46 559.66 564.88 557.14 41.12K 0.0027
2014-03-31 555.45 565.34 565.45 555.41 10.80K -0.0054
2014-04-01 565.61 557.18 566.89 557.18 7.95K 0.0183
2014-04-02 565.45 598.35 603.17 560.65 147.10K -0.0003
2014-04-03 568.18 568.29 585.67 562.59 5.10M 0.0048

원래 상태에서는 2014년 3월 31일에 해당하는 주가를 가리키려면 1번을 통해 가리키야 했지만, 이제는 해당 행을 날짜로 직접 가리킬 수 있게 됩니다.

df.loc['2014-03-31']
Price       555.45
Open        565.34
High        565.45
Low         555.41
Vol.        10.80K
Change %   -0.0054
Name: 2014-03-31 00:00:00, dtype: object

정렬

여기서 sort_index 함수를 이용하면 인덱스 순으로 정렬할 수 있습니다.

df.sort_index(inplace=True)

인덱스를 내림차순(예: 3, 2, 1 순)으로 정렬하려면 ascending=False로 설정하면 됩니다.

df.sort_index(ascending=False)

플롯

가격 컬럼에 대한 그래프를 보기 위해 df.Price.plot 함수를 사용해봅시다. 이 때 PriceP는 대문자이므로, 대문자로 입력하셔야 합니다.

이 명령을 사용하면 주가 변동을 그래프로 쉽게 파악할 수 있습니다. 가로축은 인덱스에 있는 날짜 정보를 사용하여 자동으로 표시됩니다.

그래프를 보면 대략 500달러에서 시작하여 최종적으로는 거의 3000달러까지 주가가 올라가는 것을 확인할 수 있습니다.

df.Price.plot()
<Axes: xlabel='Date'>